﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Classes
{
  public  interface IGraphImpl
    {		///<summary>
        ///adds a city to the graph
        ///</summary>
        void AddCity(City city);

        ///<summary>
        ///adds an flight to the (unweighted) graph
        ///PRE (to,from) is not contained in the graph
        ///</summary>
        void AddFlight(City startCity, City endCity);

        ///<summary>
        ///determines whether a city is in the graph
        ///</summary>
        bool ContainsCity(City city);

        ///<summary>
        ///determines whether two cities are adjacent
        ///</summary>
        bool IsAdjacent(City startCity, City endCity);

        ///<summary>
        ///Returns a list containing all cities adjancent to city.
        ///Must be a list since it should be possible to remove adjacent cities
        ///</summary>
        IList<City> GetAdjacencies(City city);

        ///<summary>
        ///Returns an Enumerator to the collection of Cities
        ///</summary>
   //     IEnumerator<City> Cities();

        ///<summary>
        ///determines whether the graph is empty
        ///</summary>
        bool IsEmpty();

        ///<summary>
        ///returns the number of vertices
        ///</summary>
        int GetNoOfCities();

        ///<summary>
        ///returns the number of flights
        ///</summary>
        int GetNoOfFlights();

        ///<summary>
        ///makes the graph empty
        ///</summary>
        void Clear();

        void Dfs(City c);
         IList<City> ReturnCityList();
     
          void Bfs(City v);
          void SetTheCityFrom(City v);
        void SetTheCityTo(City v);
        ListOfConnections BreadthFirst(IList<City> visited);
        ListOfConnections SearchForConnections(City weGoFrom, City weGoTo);
        City GetCityByName(String cityName);

      
    }
}
